home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
wheels2.arc
/
NUMDISKS.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-06-28
|
3KB
|
95 lines
{@@@@@@@@@@@ copyright (C) 1984 by Neil J. Rubenking @@@@@@@@@@@@@@@@@@@@@@@@
The purchaser of these procedures and functions may include them in COMPILED
programs freely, but may not sell or give away the source text.
This is a handy application that internally resets the switches
that tell your PC how many diskette drives it has. Certain RAM
DISK programs require switch settings to be set to the number
of physical drives PLUS the number of RAM disks you will want.
Others require that the switches show ONLY the physical drives.
NUMDISKS lets you keep your switches set for the physical drives
and reset them WITHOUT opening the PC box if need be.
NUMDISKS works ONLY in COMPILED form. There may be a problem if
it is activated any time except immediately after a system reset.
You can enter "NUMDISKS <number>", where <number> is 1..4. If you
want to skip the "press a key to reboot", add an N (or n) to your
parameter line (e.g., NUMDISKS 3n)
}
{$I regpack.typ}
{$I equipmnt.lib}
{$I reboot.lib}
{$I parametr.lib}
var
Equip_word : integer absolute $0040:$0010;
StrNumber : string[3];
OldNumber, NewNumber, error : integer;
Mask, BitChanges : integer;
Wait : boolean;
begin
StrNumber := GetParameters;
Wait := true;
OldNumber := equipment('D');
GotoXY(1,5);
WriteLn('Switches currently set for ',OldNumber,' disk drives.');
if pos('N',StrNumber) <> 0 then
begin
delete(StrNumber,pos('N',StrNumber),1);
Wait := false;
end;
if pos('n',StrNumber) <> 0 then
begin
delete(StrNumber,pos('n',StrNumber),1);
Wait := false;
end;
while pos(' ',StrNumber) <> 0 do
delete(StrNumber,pos(' ',StrNumber),1);
val(StrNumber, NewNumber, error);
if error <> 0 then NewNumber := 5;
if not (NewNumber in [1..4]) then
begin
WriteLn('Enter new number of diskette drives (1..4)');
repeat
read(NewNumber);
until newNumber in [0..4];
WriteLn;
end;
if NewNumber = 0 then
begin
Mask := $FF3E; { In binary, $FF3E is 1111111100111110. When we
AND this mask onto the Equipment flag, it
turns OFF the bottom byte (byte #0) and bytes
# 6 and 7. Byte # 0 indicates whether there
are ANY disk drives, and #6,7 say HOW many.}
BitChanges := 0
end
else
begin
Mask := $FF3F; { ANDing $FF3F onto the Equipment Flag turns OFF
bits # 6 and 7, the old value for number of
disk drives. Then we OR BitChanges onto it to
turn ON the correct bits for the new value}
BitChanges := (((NewNumber-1) shl 6) +1);
end;
if OldNumber <> NewNumber then
begin
Equip_word := (Equip_word and Mask ) or BitChanges;
WriteLn('Changed equipment information to indicate ',NewNumber:1,' drives');
if wait then
begin
WriteLn('Press a key to reboot and activate new information.');
repeat until keypressed;
end
else
begin
write(chr(7));
WriteLn('Rebooting now.');
end;
reboot;
end
else
WriteLn('No change required.');
end.